home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Portable Patmos 1.1 / patmos-src / src / proc_mmu.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-19  |  3.0 KB  |  121 lines  |  [TEXT/KAHL]

  1. #include <a.out.h>
  2. #include <sys/ptrace.h>
  3. #include <sys/wait.h>
  4.  
  5. struct mem_chain
  6.     {
  7.     struct mem_chain *nxt;
  8.     char storage[1];
  9.     };
  10.  
  11. struct mmu    {
  12. #ifdef PROTECTED
  13.     union    {
  14.             struct
  15.                 {
  16.                 long    level1[128];
  17.                 long    level2[128];
  18.                 long    level3[128][64];
  19.                 } u4;
  20.             struct
  21.                 {
  22.                 long    level2[1024];
  23.                 long    level3[8][1024];
  24.                 } u3;
  25.             } u;
  26. #endif
  27.     struct    exec header;
  28.     struct    userregs    {
  29.         long    save[16];
  30.         long    pc;
  31.         unsigned short flags;
  32.         }    registers;
  33.     char    fd_tab[OPEN_MAX+1];
  34.     struct    mmu *parent;
  35.     long    result,sbreak;
  36.     long    root_parID,crt_parID;
  37.     long    maxstack,ticks,old_ticks;
  38.     void    *self;
  39.     short    pid;
  40.     char     state,trace_me;
  41.     struct    sigacts *p_sigacts;
  42.     struct mem_chain *storage;
  43.     long    stack_limit;
  44.     char    *savestack;
  45.     };
  46.  
  47. enum {maxproc = 64};
  48.  
  49. struct page_chain
  50.     {
  51.     long    free_list[256];
  52.     struct page_chain *nxt;
  53.     long    idx;
  54.     char    padding[1<<13];
  55.     char     pages[(1<<20)-(1<<14)];
  56.     };
  57.  
  58. extern int debug,virtual;
  59. extern struct mmu *crp,*proc_tab[maxproc],*swapper;
  60. extern long mmutype;
  61. extern long *system_vectors;
  62. enum {vec_patch_size = 48*sizeof(long)};
  63.  
  64. extern long activated_pages;
  65. extern long page_size,old_ticks;
  66. extern long user_vectors[];
  67. extern long supervisor_vectors[];
  68. extern long kInterval;
  69.  
  70. int newproc(char *name, char **argv, char **envp, struct mmu *parent, long, long);
  71.  
  72. #ifdef PROTECTED
  73. int ukmemcpy(struct mmu *crp, long dest, void *src, long siz);
  74. int kumemcpy(struct mmu *crp, void *dest, long src, long siz);
  75. long ustrlen(struct mmu *crp, long src);
  76. int kustrcpy(struct mmu *crp, void *dest, long src);
  77. int umemset(struct mmu *crp, long dest, char value, long siz);
  78. int upper_space(struct mmu *crp, long size);
  79. int lower_space(struct mmu *crp, long size);
  80. void free_space(struct mmu *crp);
  81. #define LTP(x)    logical_to_physical(crp, x)
  82. #define CHECK2(crp, addr)    if (check2(crp, addr)) return -1
  83. #else
  84. #define umemset(crp, dest, value, siz) memset((void *)dest, value, siz)
  85. #define ukmemcpy(crp, dest, src, siz) memcpy((void *)dest, src, siz)
  86. #define kumemcpy(crp, dest, src, siz) memcpy(dest, (void *)src, siz)
  87. #define ustrlen(crp, src) strlen((void *)src)
  88. #define kustrcpy(crp, dest, src) strcpy((void *)dest, (void *)src)
  89. #define uumemcpy(crp, parent, dest, src, siz) memcpy((void *)dest, (void *)src, siz)
  90. #define LTP(x)    x
  91. #define CHECK2(crp, addr)
  92. #endif
  93.  
  94. void *xmalloc(size_t siz);
  95. void *xrealloc(void *, size_t siz);
  96. char *callname(int sel);
  97. void system_call(void);
  98. pascal void trap_patch_68020_0(void);
  99. pascal void trap_patch_68020_1(unsigned short);
  100. pascal void trap_patch_68030_0(void);
  101. pascal void trap_patch_68030_1(unsigned short);
  102. pascal void trap_patch_68040_0(void);
  103. pascal void trap_patch_68040_1(unsigned short);
  104.  
  105. #define extract(y, x)    static long y() = {0x4E7A, x}
  106. #define stuff(y, x)    static void y(long) = {0x4E7B, x}
  107.  
  108.      extract(sfc, 0x0000);
  109.      extract(dfc, 0x0001);
  110.      extract(usp, 0x0800);
  111.      extract(vbr, 0x0801);
  112.  
  113. #pragma parameter put_sfc(__D0)
  114.     stuff(put_sfc, 0x0000);
  115. #pragma parameter put_dfc(__D0)
  116.     stuff(put_dfc, 0x0001);
  117. #pragma parameter put_usp(__D0)
  118.     stuff(put_usp, 0x0800);
  119. #pragma parameter put_msp(__D0)
  120.     stuff(put_msp, 0x0803);
  121.